Если состояние соединения CLOSED (например, нет блока TCB), то все данные из указанного сегмента будут выброшены. Сегмент, пришедший с сигналом RST, будет ликвидирован. Сегмент же, не содержащий сигнала RST, вызовет посылку сигнала RST в ответ. Подтверждение и номер очереди будут выбраны таким образом, чтобы сделать последовательность перезагрузки приемлемой для программы TCP, отправившей сегмент, который и вызвал такую реакцию.
Если бит ACK сброшен, то используется номер очереди нуль:
<SEQ=0><ACK=SEG.SEQ+SEG.LEN><CTL=RST,ACK>
Если же ACK установлен, то
<SEQ=SEG.ACK><CTL=RST>
Вернуть управление прерванной программе. Если состояние соединения LISTEN, то cперва проверить присутствие сигнала RST. Сигнал RST, пришедший вместе с сегментом, должен игнорироваться, а управление должно быть возвращено прерванной программе.
Во-вторых, проверить на присутствие ACK.Любое подтверждение является ошибкой, если оно пришло на конец соединения, все еще находящийся в состоянии LISTEN. В ответ на любой сегмент, пришедший с ACK, должен быть сформирован приемлемый сегмент с сигналом перезагрузки. Сигнал RST должен быть сформирован следующим образом:
<SEQ=SEG.ACK><CTL=RST>
Вернуть управление прерванной программе.
В-третьих, проверить на присутствие сигнала SYN. Если установлен бит SYN, то проверить безопасность. Если значение параметра безопасность/закрытость в пришедшем сегменте не совпадает в точности со значением безопасность/ закрытость в блоке TCB, то послать сигнал перезагрузки и вернуть управление прерванной программе:
<SEQ=SEG.ACK><CTL=RST>
Если значение SEQ.PRC меньше, чем TCB.PRC, то перейти к следующему пункту. Установить RCV.NXT в SEG.SEQ+1, IRS установить в SEG.SEQ, а остальные тексты и функции управления поместить в очередь для последующей обработки. Выбрать значение для ISS и отправить сегмент подтверждения в форме
<SEQ=ISS><ACK=RCV.NXT><CTL=SYN,ACK>
Переменную SND.NXT установить в ISS+1, а SND.UNA - в ISS. Установить для соединения новое состояние - SYN-RECEIVED. Заметим, что в состоянии SYN-RECEIVED будут обрабатываться все приходящие данные и команды управления (вместе с SYN), но уже не будет как прежде осуществляться обработка сигналов SYN и ACK. Если состояние LISTEN не сформулировано полностью (например, не указан исчерпывающе чужой сокет, то именно в этот момент должны быть доопределены поля блока TCB, оставшиеся незаполненными.
В-четвертых, искать в пришедшем сегменте остальные команды управления, а также собственно данные. Любые сегменты с иными командами управления или заполненные текстом (но не содержащие сигнала SYN) должны получить от местной программы TCP подтверждение, и, таким образом, будут отброшены во время работы с подтверждением. Приходящий сегмент с сигналом RST не может быть правильным, поскольку он не может являться ответом на информацию, переданную данной реализацией соединения. Так что Вы вряд ли получите это сигнал, но если это произойдет, выбросьте пришедший сегмент и верните управление прерванной программе.